package com.estagio.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Aluno;
import com.estagio.entity.CondicaoPagamento;
import com.estagio.entity.ContaReceber;
import com.estagio.session.AlunoSession;
import com.estagio.session.CondicaoPagamentoSession;
import com.estagio.session.ContaReceberSession;

@ManagedBean(name="contaReceberBean")
@SessionScoped
public class ContaReceberBean {
	
	//VENDA
	private ContaReceber contaReceber = new ContaReceber();
	private ContaReceber contaReceberSave = new ContaReceber();
	private DataModel dmContaReceber;
	private Double somaValorTotal;
	

	
	//CONDICAO DE PAGAMENTO
	private CondicaoPagamento condicaoPagamento = new CondicaoPagamento();
	private DataModel dmCondicaoPagamento;
	private List<CondicaoPagamento> arrayCondicaoPagamento;
	
	//ALUNO
	private Aluno aluno  = new Aluno();
	private DataModel dmAluno;

	//CONTAS A RECEBER
	private List<ContaReceber> listContaReceber;

	//GETTERS AND SETTERS	
	
	public ContaReceber getContaReceber() {
		return contaReceber;
	}

	public Aluno getAluno() {
		return aluno ;
	}

	public void setAluno(Aluno aluno ) {
		this.aluno  = aluno ;
	}

	public DataModel getDmAluno() {
		return dmAluno;
	}

	public void setDmAluno(DataModel dmAluno) {
		this.dmAluno = dmAluno;
	}

	public void setContaReceber(ContaReceber contaReceber) {
		this.contaReceber = contaReceber;
	}

	public ContaReceber getContaReceberSave() {
		return contaReceberSave;
	}

	public void setContaReceberSave(ContaReceber contaReceberSave) {
		this.contaReceberSave = contaReceberSave;
	}

	public DataModel getDmContaReceber() {
		return dmContaReceber;
	}

	public void setDmContaReceber(DataModel dmContaReceber) {
		this.dmContaReceber = dmContaReceber;
	}

	public Double getSomaValorTotal() {
		return somaValorTotal;
	}

	public void setSomaValorTotal(Double somaValorTotal) {
		this.somaValorTotal = somaValorTotal;
	}

	
	
	public CondicaoPagamento getCondicaoPagamento() {
		return condicaoPagamento;
	}

	public void setCondicaoPagamento(CondicaoPagamento condicaoPagamento) {
		this.condicaoPagamento = condicaoPagamento;
	}

	public DataModel getDmCondicaoPagamento() {
		return dmCondicaoPagamento;
	}

	public void setDmCondicaoPagamento(DataModel dmCondicaoPagamento) {
		this.dmCondicaoPagamento = dmCondicaoPagamento;
	}

	public List<CondicaoPagamento> getArrayCondicaoPagamento() {
		return arrayCondicaoPagamento;
	}

	public void setArrayCondicaoPagamento(
			List<CondicaoPagamento> arrayCondicaoPagamento) {
		this.arrayCondicaoPagamento = arrayCondicaoPagamento;
	}

	public List<ContaReceber> getListContaReceber() {
		return listContaReceber;
	}

	public void setListContaReceber(List<ContaReceber> listContaReceber) {
		this.listContaReceber = listContaReceber;
	}
	
	//CONTA PAGAR
	public void saveContaReceber() {
		ContaReceberSession session = new ContaReceberSession();
		String mensagem = session.save(this.listContaReceber, null, null);
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
		RequestContext.getCurrentInstance().update("panelManterContaReceber");
		RequestContext.getCurrentInstance().update("growl");

	}

	public String deleteContaReceber() {
		ContaReceberSession contaReceberRN = new ContaReceberSession();		
		ContaReceber contaReceber = this.contaReceberSave;
		String mensagem = contaReceberRN.delete(contaReceber);
		this.contaReceberSave = new ContaReceber();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarContaReceber";
	}

	public DataModel findContaReceber() {
		ContaReceberSession contaReceberSession = new ContaReceberSession();
		List<ContaReceber> lista = contaReceberSession.find(this.contaReceber);
		this.dmContaReceber = new ListDataModel(lista);
		return this.dmContaReceber;
	}
	
	public void clean() {
		this.contaReceber = new ContaReceber();
	}
	
	//ALUNO
		public DataModel findAluno() {
			AlunoSession session = new AlunoSession();
			List<Aluno> lista = session.find(this.aluno );
			this.dmAluno = new ListDataModel(lista);
			return this.dmAluno;
		}
		
		public void selectAluno() {
			this.contaReceber.setAluno((Aluno) this.dmAluno.getRowData());
			RequestContext.getCurrentInstance().update("pgAluno");
			RequestContext.getCurrentInstance().execute("dialogConsultarAluno.hide()");
		}

	
	public void calculaTotalContaReceber() {
		ContaReceberSession sessionCR = new ContaReceberSession();
		this.listContaReceber = sessionCR.validaContaReceber(this.contaReceber);		
		RequestContext.getCurrentInstance().update("pgTotal");
		RequestContext.getCurrentInstance().update("tableParcela");
	}
	
		
	//CONDICAO DE PAGAMENTO
	public DataModel findCondicaoPagamento() {
		List<CondicaoPagamento> listaCondicaoPagamento = new CondicaoPagamentoSession().find(this.condicaoPagamento);
		this.dmCondicaoPagamento = new ListDataModel(listaCondicaoPagamento);
		return this.dmCondicaoPagamento;
	}

	public void selectCondicaoPagamento() {
		CondicaoPagamento condicaoPagamento = (CondicaoPagamento) this.dmCondicaoPagamento.getRowData();
		this.contaReceber.setCondicaoPagamento(condicaoPagamento);
		RequestContext.getCurrentInstance().update("pgCondicaoPagamento");
		RequestContext.getCurrentInstance().update("pgTotal");
		RequestContext.getCurrentInstance().execute("dialogConsultarCondicaoPagamento.hide()");
	}
	
	public Boolean disableCondicao() {
		if((this.somaValorTotal != null) && (this.somaValorTotal != 0)) {
			return false;
		} else {
			return true;
		}
	}

	
	//INVOCAR TELAS
	public String newContaReceber() {
		this.contaReceber = new ContaReceber();
		this.contaReceber.setAluno(new Aluno());
		this.contaReceber.setCondicaoPagamento(new CondicaoPagamento());
		this.arrayCondicaoPagamento = new ArrayList<CondicaoPagamento>();
		this.contaReceber.setDtPagamento(new Date());
		this.condicaoPagamento = new CondicaoPagamento();
		this.somaValorTotal = 0.00;
		this.listContaReceber = new ArrayList<ContaReceber>();
		return "manterContaReceber";
	}

	public String consultarContaReceber() {
		this.contaReceber = new ContaReceber();
		this.contaReceber.setAluno(new Aluno());
		return "consultarContaReceber";
	}

	public String editarContaReceber() {
		this.contaReceberSave = (ContaReceber) this.dmContaReceber.getRowData();		
		return "editarContaReceber";
	}
	
	public String excluirContaReceber() {
		this.contaReceberSave = (ContaReceber) this.dmContaReceber.getRowData();
		return "excluirContaReceber";
	}
	
	//DIALOGS
	public void openDialogConsultarCondicaoPagamento() {
		RequestContext.getCurrentInstance().update("idDialogConsultarCondicaoPagamento");
		RequestContext.getCurrentInstance().execute("dialogConsultarCondicaoPagamento.show()");
	}

	public void openDialogConsultarProduto() {
		RequestContext.getCurrentInstance().update("idDialogConsultarProduto");
		RequestContext.getCurrentInstance().execute("dialogConsultarProduto.show()");
	}
	
	public void openDialogConsultarAluno() {
		this.aluno  = new Aluno();
		RequestContext.getCurrentInstance().update("idDialogConsultarAluno");
		RequestContext.getCurrentInstance().execute("dialogConsultarAluno.show()");
	}
}
